/**
 **************************************************************************************************************************
 * Class implementing singleton Pattern: use it as:
 * new T;
 * T::GetSingleton()->DoSthg();
 * delete T::GetSingleton();
 **************************************************************************************************************************
 * @file RBSingleton.h
 **************************************************************************************************************************/


#ifndef __RBSINGLETON_H__
#define __RBSINGLETON_H__


/**************************************************************************************************************************
 * Includes
 **************************************************************************************************************************/
#include "RBMain/RBAssert.h"

/**************************************************************************************************************************
 * Forward declarations
 **************************************************************************************************************************/

/**************************************************************************************************************************
 * Classes
 **************************************************************************************************************************/

template<class T> class RBSingleton
{
public:
                         RBSingleton();
    virtual             ~RBSingleton();

    static T*            GetSingleton();

private:

    static T*            ms_pSingleton;
};

/**************************************************************************************************************************/

#include "RBSingleton.inl"

#endif // __RBSINGLETON_H__
